# MicroPython语言参考 ```{admonition} 本文引用的文件 :class: note - [docs/docs/zh_CN/reference/index.rst](../../../products/mpython/reference/index.rst) - [docs/docs/zh_CN/reference/glossary.rst](../../../products/mpython/reference/glossary.rst) - [docs/docs/zh_CN/reference/repl.rst](../../../products/mpython/reference/repl.rst) - [docs/docs/zh_CN/reference/constrained.rst](../../../products/mpython/reference/constrained.rst) - [docs/docs/zh_CN/reference/speed_python.rst](../../../products/mpython/reference/speed_python.rst) - [docs/docs/zh_CN/reference/packages.rst](../../../products/mpython/reference/packages.rst) - `docs/docs/zh_CN/differences/index_template.txt` - [esp32s3/docs/5_api/library/pythonStd/sys.rst](../../../products/mpython-s3/5_api/library/pythonStd/sys.rst) ``` ## 产品概述 本参考面向需要在微控制器上编写MicroPython代码的开发者,聚焦以下目标: - 明确MicroPython的语言特性与实现范围(以Python 3.4为基准) - 梳理与CPython在标准库、类型和语言级功能上的差异要点 - 提供术语表,统一理解“端口”“冻结模块”“qstr”“流对象”等概念 - 给出在资源受限环境下的性能与内存优化建议,以及包管理与部署实践 该文档基于仓库中的官方中文参考文档整理,适用于ESP32/ESP32-S3系列mPython板型及同类MicroPython平台。 **章节来源** - [docs/docs/zh_CN/reference/index.rst:1-20](../../../products/mpython/reference/index.rst) ## 核心业务流程 - 学习路径 - 从语法总览入手,了解MicroPython对Python 3.4的覆盖范围 - 通过REPL快速验证语法与API行为 - 结合“微控制器上的MicroPython”指南进行内存与性能调优 - 使用upip进行包管理,必要时将第三方库冻结到固件中 - 开发流程 - 编写Python脚本或模块 - 在Unix端口或目标设备上进行调试与测试 - 针对资源受限场景进行冻结打包与部署 - 运行后监控内存与GC行为,必要时调整阈值与调用时机 ```text flowchart TD A["开始"] --> B["阅读语法总览
确认语言特性边界"] B --> C["使用REPL交互式验证"] C --> D{"是否涉及I/O或外设?"} D -- 否 --> E["继续业务逻辑开发"] D -- 是 --> F["查阅constrained指南
优化内存与IO"] F --> G["性能分析与调优"] G --> H{"是否需要第三方库?"} H -- 否 --> I["完成开发与测试"] H -- 是 --> J["使用upip安装或交叉安装"] J --> K{"是否低内存设备?"} K -- 是 --> L["将依赖冻结为字节码"] K -- 否 --> M["直接部署到文件系统"] L --> N["构建并烧录固件"] M --> N N --> O["运行与监控(GC/内存)"] O --> P["结束"] ``` [无图表来源;该图为概念性流程图] ## 功能模块清单 - 语言与运行时 - 语法与语义:遵循Python 3.4选择特性,大部分与CPython一致 - REPL:自动缩进、自动补全、粘贴模式、软复位、原始模式、特殊变量_ - 内存与GC:堆分配、碎片化、gc.collect()、阈值控制、micropython.mem_info() - 字符串与驻留:qstr机制、字符串比较优化、interned string - 性能与优化 - const()常量替换、缓存对象引用、避免重复创建对象 - 缓冲区与memoryview、数组与bytes/bytearray优先 - 本地代码发射器(@micropython.native)、Viper代码发射器(@micropython.viper) - 直接访问硬件寄存器(如stm模块) - 包管理与部署 - upip包管理器、跨平台交叉安装、冻结字节码 - 应用资源访问(pkg_resources.resource_stream) - 术语与概念 - baremetal/board/MCU/port/MicroPython Unix port/stream/upip等 **章节来源** - [docs/docs/zh_CN/reference/repl.rst:1-180](../../../products/mpython/reference/repl.rst) - [docs/docs/zh_CN/reference/constrained.rst:1-341](../../../products/mpython/reference/constrained.rst) - [docs/docs/zh_CN/reference/speed_python.rst:1-266](../../../products/mpython/reference/speed_python.rst) - [docs/docs/zh_CN/reference/packages.rst:1-314](../../../products/mpython/reference/packages.rst) - [docs/docs/zh_CN/reference/glossary.rst:1-88](../../../products/mpython/reference/glossary.rst) ## 数据与状态 - 内存模型 - 对象分配自固定大小堆,垃圾回收自动触发并可手动调用gc.collect() - 可通过gc.threshold()调整触发阈值,减少长延迟与碎片化 - 字符串与标识符 - qstr驻留:多次出现的字符串仅存储一次,提升比较与查找效率 - interned string:通过唯一标识引用而非地址进行比较,节省时间与空间 - 冻结与资源 - 冻结模块/字节码:将源码或字节码嵌入固件,降低RAM占用,无需文件系统 - 应用资源:通过pkg_resources.resource_stream访问二进制资源,支持无文件系统场景 ```text graph TB subgraph "运行时" GC["垃圾回收器"] HEAP["堆(固定大小池)"] QSTR["qstr驻留表"] end subgraph "编译/部署" SRC["Python源码"] BYTE["字节码(.mpy)"] ROM["固件ROM/Flash"] end SRC --> BYTE BYTE --> ROM ROM --> QSTR HEAP --> GC QSTR --> |"字符串比较/查找"| 应用["应用程序"] GC --> |"回收/阈值控制"| HEAP ``` [无图表来源;该图为概念性数据与状态关系图] **章节来源** - [docs/docs/zh_CN/reference/constrained.rst:219-341](../../../products/mpython/reference/constrained.rst) - [docs/docs/zh_CN/reference/packages.rst:144-201](../../../products/mpython/reference/packages.rst) - [docs/docs/zh_CN/reference/glossary.rst:36-42](../../../products/mpython/reference/glossary.rst) ## 关键约束与边界 - 语言版本与特性 - 以Python 3.4为基准,部分更高版本特性可能不可用 - 差异主要集中于标准库、类型与少量语言级功能 - 标准库差异示例 - sys.implementation属性在MicroPython中仅实现必要最小集合 - sys.path等属性在不同端口的可用性存在差异 - 资源限制 - RAM与闪存有限,需避免频繁创建对象与字符串拼接 - 推荐使用预分配缓冲、bytes/bytearray、const常量、冻结模块 - 包管理兼容性 - upip与CPython pip不兼容;MicroPython包格式针对低内存优化 - 低内存设备推荐交叉安装并冻结字节码,避免运行时编译与文件系统依赖 ```text flowchart TD Start(["开始"]) --> CheckLib["检查所需标准库"] CheckLib --> Diff{"是否存在CPython差异?"} Diff -- 是 --> Adapt["适配MicroPython实现
或使用替代方案"] Diff -- 否 --> Proceed["继续开发"] Proceed --> MemCheck{"是否低内存设备?"} MemCheck -- 是 --> Freeze["考虑冻结依赖/字节码"] MemCheck -- 否 --> DeployFS["部署到文件系统"] Freeze --> Build["构建固件并烧录"] DeployFS --> Run["运行与测试"] Build --> Run Run --> End(["结束"]) ``` [无图表来源;该图为概念性决策流程图] **章节来源** - [docs/docs/zh_CN/reference/index.rst:4-9](../../../products/mpython/reference/index.rst) - `docs/docs/zh_CN/differences/index_template.txt:1-11` - [esp32s3/docs/5_api/library/pythonStd/sys.rst:74-114](../../../products/mpython-s3/5_api/library/pythonStd/sys.rst) - [docs/docs/zh_CN/reference/packages.rst:39-70](../../../products/mpython/reference/packages.rst) ## 术语表 以下为仓库中已定义的关键术语(节选),便于统一理解: - baremetal:无完整操作系统的系统,如MCU;MicroPython通过REPL充当用户态OS - board:PCB板,常指特定MCU型号或MicroPython port对应的板型 - callee-owned tuple:由内置函数返回的元组,生命周期受调用方控制,用于内存优化 - CPython:Python参考实现,其他实现(含MicroPython)与其存在差异 - GPIO/GPIO port:通用输入/输出及其端口分组 - interned string:实习字符串,通过唯一标识引用,比较更高效 - MCU:微控制器,资源受限但体积小功耗低 - micropython-lib:独立于MicroPython核心的标准库子集项目 - MicroPython port:针对不同系统/板型的移植实现 - MicroPython Unix port:面向POSIX系统的端口,用于开发与测试 - port:port或GPIO port的简称 - stream:类文件对象,提供顺序读写接口 - upip:MicroPython包管理器,功能较pip精简 **章节来源** - [docs/docs/zh_CN/reference/glossary.rst:7-88](../../../products/mpython/reference/glossary.rst)